본문으로 건너뛰기

3, 4 Way Handshaking에 대해서 설명해주세요.

3 Way Handshaking 과정은 TCP 프로토콜 통신을 연결하기위한 과정이고 4 Way Handshaking 과정은 TCP 프로토콜 통신을 종료하기위한 과정이다.

3 Way Handshaking

패킷을 전송하기 전, TCP는 연결지향형 프로토콜이기 때문에 송신측과 수신측이 서로 연결되는 작업이 필요하다. 이러한 작업을 3 Way Handshaking이라고 부른다.



3 Way Handshaking을 수행하기 위해서는 TCP 헤더에 표시한 플래그들이 사용되며, 이러한 플래그들을 컨트롤 비트라고 부른다.

3 Way Handshaking은 SYN(동기화)과 ACK(승인)로 진행됩니다.

  1. 먼저 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보냅니다.
  2. 서버는 SYN 패킷을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN 플래그가 설정된 패킷을 보낸다.
  3. 클라이언트는 다시 서버에게 ACK를 보낸다.
  4. 이제 3 Way Handshaking으로 기기간 연결이 성립되었으니, 데이터 통신이 가능해집니다.

4 Way Handshaking

패킷 통신이 끝났다면, TCP 연결을 종료해야 한다.


여기서도 TCP의 컨트롤 비트가 사용되며 해당 단계에서는 ACK(승인), FIN(종료) 플래그가 사용된다.


  1. 클라이언트는 서버에게 연결을 종료하겠다는 의미인 FIN 패킷을 전송한다.
  2. 서버는 클라이언트에게 ACK 패킷을 보내고, 클라이언트가 보냈던 요청들에 대해 마저 응답을 보낸다.
  3. 이후, 서버의 응답이 끝나면 클라이언트에게 FIN 패킷을 전송한다.
  4. 클라이언트는 서버의 통신 종료를 확인한 뒤, 서버에게 ACK 패킷을 전송하고, 연결이 종료된다.

서버가 클라이언트에게 FIN을 보내는 과정에서 한가지 문제가 발생할 수 있다.


서버가 클라이언트에게 FIN을 보내기 전에, 이전에 서버가 클라이언트에게 응답했던 패킷이 FIN 보다 늦게 도착할 수도 있다. 이러한 경우 클라이언트가 서버의 일부 응답을 받지 못하게 된다.

따라서 클라이언트는 서버로부터 FIN 패킷을 받고, ACK 패킷을 보낸 뒤에도 일정시간동안 혹시나 아직 도착하지 않은 잉여 패킷을 기다립니다.

이렇게 4 Way Handshaking 이후에도 소켓을 닫지 않고 잉여 패킷을 기다리는 상태를 TIME_WAIT 상태라고 부른다.

Reference